<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>GraphChi: src/api/graphlab2_1_GAS_api/graphchi_graphlabv2_1.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">GraphChi
   &#160;<span id="projectnumber">0.1</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Macros</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_da61e3e9a357748887e3ca8d7c5a0c16.html">api</a></li><li class="navelem"><a class="el" href="dir_e5a4eaccc64dd7be23d11ca7c6bde8d2.html">graphlab2_1_GAS_api</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">graphchi_graphlabv2_1.hpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="graphchi__graphlabv2__1_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#ifndef DEF_GRAPHLAB_WRAPPERS</span></div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define DEF_GRAPHLAB_WRAPPERS</span></div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="graphchi__basic__includes_8hpp.html">graphchi_basic_includes.hpp</a>&quot;</span></div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">using namespace </span>graphchi;</div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">namespace </span>graphlab {</div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    </div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_i_s___p_o_d___t_y_p_e.html">   39</a></span>&#160;    <span class="keyword">struct </span><a class="code" href="structgraphlab_1_1_i_s___p_o_d___t_y_p_e.html">IS_POD_TYPE</a> { };</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="structgraphlab_1_1empty.html">   40</a></span>&#160;    <span class="keyword">struct </span><a class="code" href="structgraphlab_1_1empty.html">empty</a> {};</div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    </div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keyword">enum</span> edge_dir_type {</div>
<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;        NO_EDGES = 0, </div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;        IN_EDGES = 1, </div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        OUT_EDGES = 2 , </div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        ALL_EDGES = 3</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    };</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    </div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    </div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> GraphType,</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="keyword">typename</span> GatherType, </div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keyword">typename</span> MessageType&gt;</div>
<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html">   72</a></span>&#160;    <span class="keyword">class </span><a class="code" href="classgraphlab_1_1icontext.html">icontext</a> {</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keyword">public</span>:</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        <span class="comment">// Type members ===========================================================</span></div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;        </div>
<div class="line"><a name="l00079"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#adeea37e06c012067a2ec57cd0d14cbac">   79</a></span>&#160;        <span class="keyword">typedef</span> GraphType <a class="code" href="classgraphlab_1_1icontext.html#adeea37e06c012067a2ec57cd0d14cbac" title="the user graph type (typically distributed_graph)">graph_type</a>;   </div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;        </div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a16c26ddb8bbbef6c0aa62fcbb1d8157d">   85</a></span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">graph_type::vertex_type</a> <a class="code" href="classgraphlab_1_1icontext.html#a16c26ddb8bbbef6c0aa62fcbb1d8157d" title="the opaque vertex_type defined in the ivertex_program::graph_type (typically distributed_graph::verte...">vertex_type</a>;</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        </div>
<div class="line"><a name="l00091"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a1a1817b36be531195eb5bf374cc393ce">   91</a></span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> graph_type::vertex_id_type <a class="code" href="classgraphlab_1_1icontext.html#a1a1817b36be531195eb5bf374cc393ce" title="the global vertex identifier (see graphlab::vertex_id_type).">vertex_id_type</a>;</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        </div>
<div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a64f23efbbf13a9421b8efada6966643b">   97</a></span>&#160;        <span class="keyword">typedef</span> MessageType <a class="code" href="classgraphlab_1_1icontext.html#a64f23efbbf13a9421b8efada6966643b">message_type</a>;</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;        </div>
<div class="line"><a name="l00103"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#ae1699cad574dda8cdb91d639a9c82d9e">  103</a></span>&#160;        <span class="keyword">typedef</span> GatherType <a class="code" href="classgraphlab_1_1icontext.html#ae1699cad574dda8cdb91d639a9c82d9e">gather_type</a>;</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        </div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        <span class="comment">/* GraphChi */</span></div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        <a class="code" href="structgraphchi_1_1graphchi__context.html">graphchi_context</a> * gcontext;</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        </div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        </div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        </div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="keyword">public</span>:        </div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        </div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        <a class="code" href="classgraphlab_1_1icontext.html">icontext</a>(<a class="code" href="structgraphchi_1_1graphchi__context.html">graphchi_context</a> * gcontext) : gcontext(gcontext) {}</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        </div>
<div class="line"><a name="l00115"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a8939d5bec338e978f8892ec8d4e1d7eb">  115</a></span>&#160;        <span class="keyword">virtual</span> <a class="code" href="classgraphlab_1_1icontext.html#a8939d5bec338e978f8892ec8d4e1d7eb" title="icontext destructor">~icontext</a>() { }</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        </div>
<div class="line"><a name="l00122"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a31f6e5cc044621a104c995a3a30d581e">  122</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classgraphlab_1_1icontext.html#a31f6e5cc044621a104c995a3a30d581e" title="Get the total number of vertices in the graph.">num_vertices</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> gcontext-&gt;nvertices; }</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        </div>
<div class="line"><a name="l00131"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#af556d0f00636857364bf8906cc9a7b8a">  131</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classgraphlab_1_1icontext.html#af556d0f00636857364bf8906cc9a7b8a" title="Get the number of edges in the graph.">num_edges</a>()<span class="keyword"> const </span>{ assert(<span class="keyword">false</span>); <span class="keywordflow">return</span> 0; } <span class="comment">// Not implemented yet </span></div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        </div>
<div class="line"><a name="l00143"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#ab57348d56fb08bd10f3edbccc4137cb1">  143</a></span>&#160;            <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classgraphlab_1_1icontext.html#ab57348d56fb08bd10f3edbccc4137cb1" title="Get the id of this process.">procid</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="keywordtype">size_t</span>) omp_get_thread_num(); }</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        </div>
<div class="line"><a name="l00159"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a7f827dd93aba5809b69cf659554f8869">  159</a></span>&#160;        <span class="keyword">virtual</span> std::ostream&amp; <a class="code" href="classgraphlab_1_1icontext.html#a7f827dd93aba5809b69cf659554f8869" title="Returns a standard output object (like cout) which only prints once even when running distributed...">cout</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::cout; }</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        </div>
<div class="line"><a name="l00175"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a9f7cbf4f381fa287ae2ebfc7ee356810">  175</a></span>&#160;        <span class="keyword">virtual</span> std::ostream&amp; <a class="code" href="classgraphlab_1_1icontext.html#a9f7cbf4f381fa287ae2ebfc7ee356810" title="Returns a standard error object (like cerr) which only prints once even when running distributed...">cerr</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::cerr; } </div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        </div>
<div class="line"><a name="l00188"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a67622ed912bfb1bba05b3579b0d1486f">  188</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classgraphlab_1_1icontext.html#a67622ed912bfb1bba05b3579b0d1486f" title="Get the number of processes in the current execution.">num_procs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> gcontext-&gt;execthreads; }</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        </div>
<div class="line"><a name="l00195"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a863010fd33f3721162d253af3583f8bb">  195</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">float</span> <a class="code" href="classgraphlab_1_1icontext.html#a863010fd33f3721162d253af3583f8bb" title="Get the elapsed time in seconds since start was called.">elapsed_seconds</a>()<span class="keyword"> const </span>{  <span class="keywordflow">return</span> gcontext-&gt;runtime(); }</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;        </div>
<div class="line"><a name="l00203"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a29496c1e0434d716726ac2a703c81f32">  203</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classgraphlab_1_1icontext.html#a29496c1e0434d716726ac2a703c81f32" title="Return the current interation number (if supported).">iteration</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> gcontext-&gt;iteration; } </div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;        </div>
<div class="line"><a name="l00215"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a3d9adafb629c9560a8cdb80f94a2583d">  215</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgraphlab_1_1icontext.html#a3d9adafb629c9560a8cdb80f94a2583d" title="Signal the engine to stop executing additional update functions.">stop</a>() { </div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;            gcontext-&gt;last_iteration = gcontext-&gt;iteration;</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;        } </div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        </div>
<div class="line"><a name="l00237"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#ab1b5ca81e1c7665a98f4cad04fb0819d">  237</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> signal(<span class="keyword">const</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>&amp; vertex, </div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;                            <span class="keyword">const</span> <a class="code" href="classgraphlab_1_1icontext.html#a64f23efbbf13a9421b8efada6966643b">message_type</a>&amp; <a class="code" href="structmessage.html">message</a> = <a class="code" href="classgraphlab_1_1icontext.html#a64f23efbbf13a9421b8efada6966643b">message_type</a>()) { </div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;            gcontext-&gt;scheduler-&gt;add_task(vertex.<a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#abcc164070e228a8133c627703c1917f0" title="Returns the vertex ID of the vertex.">id</a>());</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        }</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;        </div>
<div class="line"><a name="l00253"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a210bf29be5d4216dfda2591aaf42df73">  253</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> signal_vid(<a class="code" href="classgraphlab_1_1icontext.html#a1a1817b36be531195eb5bf374cc393ce" title="the global vertex identifier (see graphlab::vertex_id_type).">vertex_id_type</a> gvid, </div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;                                <span class="keyword">const</span> <a class="code" href="classgraphlab_1_1icontext.html#a64f23efbbf13a9421b8efada6966643b">message_type</a>&amp; <a class="code" href="structmessage.html">message</a> = <a class="code" href="classgraphlab_1_1icontext.html#a64f23efbbf13a9421b8efada6966643b">message_type</a>()) {</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;            gcontext-&gt;scheduler-&gt;add_task(gvid);</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        }</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;        </div>
<div class="line"><a name="l00282"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a9c85c9b34ae08d72a28ca5e698a34482">  282</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> post_delta(<span class="keyword">const</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>&amp; vertex, </div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;                                <span class="keyword">const</span> <a class="code" href="classgraphlab_1_1icontext.html#ae1699cad574dda8cdb91d639a9c82d9e">gather_type</a>&amp; delta) { </div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;            assert(<span class="keyword">false</span>); <span class="comment">// Not implemented</span></div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;        } </div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;        </div>
<div class="line"><a name="l00295"></a><span class="lineno"><a class="code" href="classgraphlab_1_1icontext.html#a9f7c49ee6b4a59be90ae65841597bd5b">  295</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgraphlab_1_1icontext.html#a9f7c49ee6b4a59be90ae65841597bd5b" title="Invalidate the cached gather on the vertex.">clear_gather_cache</a>(<span class="keyword">const</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>&amp; vertex) {</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;            assert(<span class="keyword">false</span>); <span class="comment">// Not implemented</span></div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        } </div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;        </div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    }; <span class="comment">// end of icontext</span></div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    </div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;    <span class="comment">/* Forward declaratinos */</span></div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> GLVertexDataType, <span class="keyword">typename</span> EdgeDataType&gt;</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    <span class="keyword">struct </span>GraphLabVertexWrapper;</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    </div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> GLVertexDataType, <span class="keyword">typename</span> EdgeDataType&gt;</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <span class="keyword">struct </span>GraphLabEdgeWrapper;</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    </div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="comment">/* Fake distributed graph type (this is often hard-coded</span></div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;<span class="comment">     in GraphLab vertex programs. */</span></div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> vertex_data, <span class="keyword">typename</span> edge_data&gt;</div>
<div class="line"><a name="l00312"></a><span class="lineno"><a class="code" href="structgraphlab_1_1distributed__graph.html">  312</a></span>&#160;    <span class="keyword">struct </span><a class="code" href="structgraphlab_1_1distributed__graph.html">distributed_graph</a> {</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;        <span class="keyword">typedef</span> <a class="code" href="structvertex__data.html" title="the vertex data type which contains the latent factor.">vertex_data</a> <a class="code" href="structvertex__data.html" title="the vertex data type which contains the latent factor.">vertex_data_type</a>;</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;        <span class="keyword">typedef</span> <a class="code" href="structedge__data.html" title="The edge data stores the entry in the matrix.">edge_data</a> <a class="code" href="structedge__data.html" title="The edge data stores the entry in the matrix.">edge_data_type</a>;</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;        <span class="keyword">typedef</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">GraphLabVertexWrapper&lt;vertex_data_type, edge_data_type&gt;</a> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>;</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;        <span class="keyword">typedef</span> <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">GraphLabEdgeWrapper&lt;vertex_data_type, edge_data_type&gt;</a> <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">edge_type</a>;</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;        <span class="keyword">typedef</span> graphchi::vid_t vertex_id_type;</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    };</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    </div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    </div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    <span class="comment">/* GraphChi&#39;s version of the ivertex_program */</span></div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Graph,</div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    <span class="keyword">typename</span> GatherType, <span class="keyword">typename</span> MessageType = <span class="keywordtype">bool</span>&gt; </div>
<div class="line"><a name="l00324"></a><span class="lineno"><a class="code" href="structgraphlab_1_1ivertex__program.html">  324</a></span>&#160;    <span class="keyword">struct </span><a class="code" href="structgraphlab_1_1ivertex__program.html">ivertex_program</a> {</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;        </div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;        <span class="comment">/* Type definitions */</span></div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> Graph::vertex_data_type vertex_data_type;</div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> Graph::edge_data_type edge_data_type;</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;        <span class="keyword">typedef</span> GatherType gather_type;</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;        <span class="keyword">typedef</span> MessageType message_type;</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;        </div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;        <span class="keyword">typedef</span> Graph <a class="code" href="als__vertex__program_8hpp.html#ab9cfd2cad1698282b6c7fd7f7e7fd459" title="The graph type is defined in terms of the vertex and edge data.">graph_type</a>;</div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> graphchi::vid_t vertex_id_type;</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;        <span class="keyword">typedef</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">GraphLabVertexWrapper&lt;vertex_data_type, edge_data_type&gt;</a> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>;</div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;        <span class="keyword">typedef</span> <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">GraphLabEdgeWrapper&lt;vertex_data_type, edge_data_type&gt;</a> <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">edge_type</a>;</div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;        <span class="keyword">typedef</span> <a class="code" href="classgraphlab_1_1icontext.html">icontext&lt;graph_type, gather_type, message_type&gt;</a> <a class="code" href="classgraphlab_1_1icontext.html">icontext_type</a>;</div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;        </div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;        <span class="keyword">typedef</span> graphlab::edge_dir_type edge_dir_type;</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;        </div>
<div class="line"><a name="l00340"></a><span class="lineno"><a class="code" href="structgraphlab_1_1ivertex__program.html#ad371b64021ac80eaae332319dec41723">  340</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> init(<a class="code" href="classgraphlab_1_1icontext.html">icontext_type</a>&amp; context,</div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;                          <span class="keyword">const</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>&amp; vertex, </div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;                          <span class="keyword">const</span> <a class="code" href="structgraphlab_1_1messages_1_1sum__priority.html">message_type</a>&amp; msg) {  }</div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;        </div>
<div class="line"><a name="l00348"></a><span class="lineno"><a class="code" href="structgraphlab_1_1ivertex__program.html#a7b978b86d8c8a47f68f1647b630887f8">  348</a></span>&#160;        <span class="keyword">virtual</span> edge_dir_type gather_edges(<a class="code" href="classgraphlab_1_1icontext.html">icontext_type</a>&amp; context,</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;                                           <span class="keyword">const</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>&amp; vertex)<span class="keyword"> const </span>{ </div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;            <span class="keywordflow">return</span> IN_EDGES; </div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;        }</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;        </div>
<div class="line"><a name="l00358"></a><span class="lineno"><a class="code" href="structgraphlab_1_1ivertex__program.html#a7ad835ddf125627fcedce3a3172428ef">  358</a></span>&#160;        <span class="keyword">virtual</span> gather_type gather(<a class="code" href="classgraphlab_1_1icontext.html">icontext_type</a>&amp; context, </div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;                                   <span class="keyword">const</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>&amp; vertex, </div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;                                   <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">edge_type</a>&amp; <a class="code" href="structedge.html">edge</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;            logstream(<a class="code" href="logger_8hpp.html#ac2164369b4d2bf72296f8ba6ea576ecf">LOG_FATAL</a>) &lt;&lt; <span class="stringliteral">&quot;Gather not implemented!&quot;</span> &lt;&lt; std::endl;</div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;            <span class="keywordflow">return</span> gather_type();</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;        };</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;        </div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> apply(icontext_type&amp; context, </div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;                           vertex_type&amp; vertex, </div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;                           <span class="keyword">const</span> <a class="code" href="classgather__type.html" title="The graph loader function is a line parser used for distributed graph construction.">gather_type</a>&amp; total) = 0;</div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;        </div>
<div class="line"><a name="l00377"></a><span class="lineno"><a class="code" href="structgraphlab_1_1ivertex__program.html#aa296513f9727bb48b372a0386c7e0c05">  377</a></span>&#160;        <span class="keyword">virtual</span> edge_dir_type scatter_edges(<a class="code" href="classgraphlab_1_1icontext.html">icontext_type</a>&amp; context,</div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;                                            <span class="keyword">const</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>&amp; vertex)<span class="keyword"> const </span>{ </div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;            <span class="keywordflow">return</span> OUT_EDGES; </div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;        }</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;        </div>
<div class="line"><a name="l00387"></a><span class="lineno"><a class="code" href="structgraphlab_1_1ivertex__program.html#a68e93eefb25b31b0df72b4c454a89105">  387</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> scatter(<a class="code" href="classgraphlab_1_1icontext.html">icontext_type</a>&amp; context, <span class="keyword">const</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>&amp; vertex, </div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;                             <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">edge_type</a>&amp; <a class="code" href="structedge.html">edge</a>)<span class="keyword"> const </span>{ </div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;            logstream(<a class="code" href="logger_8hpp.html#ac2164369b4d2bf72296f8ba6ea576ecf">LOG_FATAL</a>) &lt;&lt; <span class="stringliteral">&quot;Scatter not implemented!&quot;</span> &lt;&lt; std::endl;</div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;        };</div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    };</div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;    </div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> GLVertexDataType, <span class="keyword">typename</span> EdgeDataType&gt;</div>
<div class="line"><a name="l00394"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">  394</a></span>&#160;    <span class="keyword">struct </span><a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">GraphLabVertexWrapper</a> {</div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;        <span class="keyword">typedef</span> <a class="code" href="classgraphchi_1_1graphchi__vertex.html">graphchi_vertex&lt;bool, EdgeDataType&gt;</a> <a class="code" href="classgraphchi_1_1graphchi__vertex.html">VertexType</a>; <span class="comment">// Confusing!</span></div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;        <span class="keyword">typedef</span> GLVertexDataType vertex_data_type;</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;        <span class="keyword">typedef</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">GraphLabVertexWrapper&lt;GLVertexDataType, EdgeDataType&gt;</a> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>;</div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;        </div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;        graphchi::vid_t vertexId;</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;        <a class="code" href="classgraphchi_1_1graphchi__vertex.html">VertexType</a> * vertex;</div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;        std::vector&lt;GLVertexDataType&gt; * vertexArray;</div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;        </div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;        <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">GraphLabVertexWrapper</a>(graphchi::vid_t vertexId, <a class="code" href="classgraphchi_1_1graphchi__vertex.html">VertexType</a> * vertex,</div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;                                    std::vector&lt;GLVertexDataType&gt; * vertexArray): vertexId(vertexId), </div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;                                        vertex(vertex), vertexArray(vertexArray) { }</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;        </div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;        <span class="keywordtype">bool</span> operator==(<a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>&amp; other)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;            <span class="keywordflow">return</span> vertexId == other.vertexId;</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;        }</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;        </div>
<div class="line"><a name="l00412"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#aa15502c3f0ca6fbfe636a25e1e349aa4">  412</a></span>&#160;        <span class="keyword">const</span> vertex_data_type&amp; <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#aa15502c3f0ca6fbfe636a25e1e349aa4" title="Returns a constant reference to the data on the vertex.">data</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;            <span class="keywordflow">return</span> (*vertexArray)[vertexId];</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;        }</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;        </div>
<div class="line"><a name="l00417"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#a3d93f69228ba4cea0de5b3aaf1af0800">  417</a></span>&#160;        vertex_data_type&amp; <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#a3d93f69228ba4cea0de5b3aaf1af0800" title="Returns a mutable reference to the data on the vertex.">data</a>() {</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;            <span class="keywordflow">return</span> (*vertexArray)[vertexId];</div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;        }</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;        </div>
<div class="line"><a name="l00422"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#a8a53d9001d22ab0a875b02c2cabc048e">  422</a></span>&#160;        <span class="keywordtype">size_t</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#a8a53d9001d22ab0a875b02c2cabc048e" title="Returns the number of in edges of the vertex.">num_in_edges</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;            <span class="keywordflow">if</span> (vertex == NULL) {</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;                logstream(<a class="code" href="logger_8hpp.html#aced66975c154ea0e2a8ec3bc818b4e08">LOG_ERROR</a>) &lt;&lt; <span class="stringliteral">&quot;GraphChi does not support asking neighbor vertices in/out degrees.&quot;</span> &lt;&lt; std::endl;</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;                <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;            }</div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;            <span class="keywordflow">return</span> vertex-&gt;num_edges();</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;        }</div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;        </div>
<div class="line"><a name="l00431"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#a3f271cdd29c871a12991826179a17d86">  431</a></span>&#160;        <span class="keywordtype">size_t</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#a3f271cdd29c871a12991826179a17d86" title="Returns the number of out edges of the vertex.">num_out_edges</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;            <span class="keywordflow">if</span> (vertex == NULL) {</div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;                logstream(<a class="code" href="logger_8hpp.html#aced66975c154ea0e2a8ec3bc818b4e08">LOG_ERROR</a>) &lt;&lt; <span class="stringliteral">&quot;GraphChi does not support asking neighbor vertices in/out degrees.&quot;</span> &lt;&lt; std::endl;</div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;                <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;            }</div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;            <span class="keywordflow">return</span> vertex-&gt;num_outedges();</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;        }</div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;        </div>
<div class="line"><a name="l00440"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#abcc164070e228a8133c627703c1917f0">  440</a></span>&#160;        graphchi::vid_t <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#abcc164070e228a8133c627703c1917f0" title="Returns the vertex ID of the vertex.">id</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;            <span class="keywordflow">return</span> vertexId;</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;        }</div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;        </div>
<div class="line"><a name="l00447"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#a751dcd1a2180f251d4ad93175a89602f">  447</a></span>&#160;        graphchi::vid_t <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html#a751dcd1a2180f251d4ad93175a89602f" title="Returns the local ID of the vertex.">local_id</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;            <span class="keywordflow">return</span> vertexId;</div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;        }</div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;        </div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    };</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    </div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;    </div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> GLVertexDataType, <span class="keyword">typename</span> EdgeDataType&gt;</div>
<div class="line"><a name="l00455"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">  455</a></span>&#160;    <span class="keyword">struct </span><a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">GraphLabEdgeWrapper</a> {</div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;        <span class="keyword">typedef</span> <a class="code" href="classgraphchi_1_1graphchi__vertex.html">graphchi_vertex&lt;bool, EdgeDataType&gt;</a> <a class="code" href="classgraphchi_1_1graphchi__vertex.html">VertexType</a>;</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;        <span class="keyword">typedef</span> GLVertexDataType vertex_data_type;</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;        <span class="keyword">typedef</span> EdgeDataType edge_data_type;</div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;        <span class="keyword">typedef</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">GraphLabVertexWrapper&lt;GLVertexDataType, EdgeDataType&gt;</a> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a>;</div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;        <a class="code" href="classgraphchi_1_1graphchi__edge.html">graphchi_edge&lt;EdgeDataType&gt;</a> * <a class="code" href="structedge.html">edge</a>;</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;        <a class="code" href="classgraphchi_1_1graphchi__vertex.html">VertexType</a> * vertex;</div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;        std::vector&lt;GLVertexDataType&gt; * vertexArray;</div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;        <span class="keywordtype">bool</span> is_inedge;</div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;        </div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;        <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">GraphLabEdgeWrapper</a>(<a class="code" href="classgraphchi_1_1graphchi__edge.html">graphchi_edge&lt;EdgeDataType&gt;</a> * <a class="code" href="structedge.html">edge</a>, <a class="code" href="classgraphchi_1_1graphchi__vertex.html">VertexType</a> * vertex,</div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;                         std::vector&lt;GLVertexDataType&gt; * vertexArray, <span class="keywordtype">bool</span> is_inedge): </div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;        edge(edge), vertex(vertex), vertexArray(vertexArray), is_inedge(is_inedge) { }</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;        </div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;             </div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;    <span class="keyword">public</span>:</div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;        </div>
<div class="line"><a name="l00484"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html#a1176dc7f68117e758dad6c65dd7c7358">  484</a></span>&#160;        <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a> <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html#a1176dc7f68117e758dad6c65dd7c7358" title="Returns the source vertex of the edge. This function returns a vertex_object by value and as a conseq...">source</a>()<span class="keyword"> const </span>{ </div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;            <span class="keywordflow">if</span> (is_inedge) {</div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;                <span class="keywordflow">return</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">GraphLabVertexWrapper&lt;GLVertexDataType, EdgeDataType&gt;</a>(vertex-&gt;id(), vertex, vertexArray); </div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;            } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;                <span class="keywordflow">return</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">GraphLabVertexWrapper&lt;GLVertexDataType, EdgeDataType&gt;</a>(edge-&gt;<a class="code" href="classgraphchi_1_1graphchi__edge.html#a5d55d4d82a58faa5858dfb898f2258d6">vertex_id</a>(), NULL, vertexArray); </div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;            }</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;        }</div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;        </div>
<div class="line"><a name="l00504"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html#a6c4d5eaded1d40e10775707ff7189dc7">  504</a></span>&#160;        <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">vertex_type</a> <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html#a6c4d5eaded1d40e10775707ff7189dc7" title="Returns the target vertex of the edge.">target</a>()<span class="keyword"> const </span>{ </div>
<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;            <span class="keywordflow">if</span> (!is_inedge) {</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;                <span class="keywordflow">return</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">GraphLabVertexWrapper&lt;GLVertexDataType, EdgeDataType&gt;</a>(vertex-&gt;id(), vertex, vertexArray); </div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;            } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;                <span class="keywordflow">return</span> <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">GraphLabVertexWrapper&lt;GLVertexDataType, EdgeDataType&gt;</a>(edge-&gt;<a class="code" href="classgraphchi_1_1graphchi__edge.html#a5d55d4d82a58faa5858dfb898f2258d6">vertex_id</a>(), NULL, vertexArray); </div>
<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;            }</div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;        }</div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;        </div>
<div class="line"><a name="l00515"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html#a3bfdff77561dc08db04ea7cc3fc4d2c8">  515</a></span>&#160;        <span class="keyword">const</span> edge_data_type&amp; <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html#a3bfdff77561dc08db04ea7cc3fc4d2c8" title="Returns a constant reference to the data on the edge.">data</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span>edge_data_type&amp;<span class="keyword">&gt;</span>(*edge-&gt;data_ptr); }</div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;        </div>
<div class="line"><a name="l00520"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html#af3f688181c34dd970b0787479c9ab8d3">  520</a></span>&#160;        edge_data_type&amp; <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html#af3f688181c34dd970b0787479c9ab8d3" title="Returns a mutable reference to the data on the edge.">data</a>() { <span class="keywordflow">return</span> *(edge-&gt;data_ptr); }</div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;        </div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    }; <span class="comment">// end of edge_type</span></div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    </div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    </div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> GraphLabVertexProgram&gt;</div>
<div class="line"><a name="l00526"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html">  526</a></span>&#160;    <span class="keyword">struct </span><a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html">GraphLabWrapper</a> : <span class="keyword">public</span> <a class="code" href="classgraphchi_1_1_graph_chi_program.html">GraphChiProgram</a>&lt;bool, typename GraphLabVertexProgram::edge_data_type&gt; {</div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;        <span class="keyword">typedef</span> <span class="keywordtype">bool</span> <a class="code" href="basic__dynamicengine__smoketest_8cpp.html#acf10237949ab87b83055ff6aa646c565">VertexDataType</a>;  <span class="comment">/* Temporary hack: as the vertices are stored in memory, no need to store on disk. */</span></div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> GraphLabVertexProgram::vertex_data_type GLVertexDataType;</div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> GraphLabVertexProgram::edge_data_type EdgeDataType;</div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> GraphLabVertexProgram::gather_type gather_type;</div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="als__vertex__program_8hpp.html#ab9cfd2cad1698282b6c7fd7f7e7fd459" title="The graph type is defined in terms of the vertex and edge data.">GraphLabVertexProgram::graph_type</a> <a class="code" href="als__vertex__program_8hpp.html#ab9cfd2cad1698282b6c7fd7f7e7fd459" title="The graph type is defined in terms of the vertex and edge data.">graph_type</a>;</div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> GraphLabVertexProgram::message_type message_type;</div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;        </div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;        std::vector&lt;GLVertexDataType&gt; * vertexInmemoryArray;</div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;     </div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;        <a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html">GraphLabWrapper</a>() {</div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;            vertexInmemoryArray = <span class="keyword">new</span> std::vector&lt;GLVertexDataType&gt;();</div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;        }</div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;        </div>
<div class="line"><a name="l00543"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html#adf467de73aa2872f26bfbb69acd5a786">  543</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html#adf467de73aa2872f26bfbb69acd5a786">before_iteration</a>(<span class="keywordtype">int</span> iteration, <a class="code" href="structgraphchi_1_1graphchi__context.html">graphchi_context</a> &amp;gcontext) {</div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;            <span class="keywordflow">if</span> (gcontext.iteration == 0) {</div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;                logstream(<a class="code" href="logger_8hpp.html#aeb4f36db01bd128c7afeac5889dac311">LOG_INFO</a>) &lt;&lt; <span class="stringliteral">&quot;Initialize vertices in memory.&quot;</span> &lt;&lt; std::endl;</div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;                vertexInmemoryArray-&gt;resize(gcontext.nvertices);</div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;            }</div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;        }</div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;        </div>
<div class="line"><a name="l00553"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html#a05c0f6179d0fe9ff42c8316aa291ee7b">  553</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html#a05c0f6179d0fe9ff42c8316aa291ee7b">after_iteration</a>(<span class="keywordtype">int</span> iteration, <a class="code" href="structgraphchi_1_1graphchi__context.html">graphchi_context</a> &amp;gcontext) {</div>
<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;        }</div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;        </div>
<div class="line"><a name="l00559"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html#a0c28d847bdc61be0b8df7e454feec92f">  559</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html#a0c28d847bdc61be0b8df7e454feec92f">before_exec_interval</a>(vid_t window_st, vid_t window_en, <a class="code" href="structgraphchi_1_1graphchi__context.html">graphchi_context</a> &amp;gcontext) {        </div>
<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;        }</div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;        </div>
<div class="line"><a name="l00565"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html#a82b1e2bc82f28198824c51c70cdab814">  565</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html#a82b1e2bc82f28198824c51c70cdab814">after_exec_interval</a>(vid_t window_st, vid_t window_en, <a class="code" href="structgraphchi_1_1graphchi__context.html">graphchi_context</a> &amp;gcontext) {        </div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;        }</div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;        </div>
<div class="line"><a name="l00571"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html#a2bb446aec6186aec08e2e441751eb986">  571</a></span>&#160;        <span class="keywordtype">void</span> <a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html#a2bb446aec6186aec08e2e441751eb986">update</a>(<a class="code" href="classgraphchi_1_1graphchi__vertex.html">graphchi_vertex&lt;bool, EdgeDataType&gt;</a> &amp;vertex, <a class="code" href="structgraphchi_1_1graphchi__context.html">graphchi_context</a> &amp;gcontext) {</div>
<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;            <a class="code" href="classgraphlab_1_1icontext.html">graphlab::icontext&lt;graph_type, gather_type, message_type&gt;</a> glcontext(&amp;gcontext);</div>
<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;            </div>
<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;            <span class="comment">/* Create the vertex program */</span></div>
<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;            <a class="code" href="structgraphlab_1_1_graph_lab_vertex_wrapper.html">GraphLabVertexWrapper&lt;GLVertexDataType, EdgeDataType&gt;</a> wrapperVertex(vertex.id(), &amp;vertex, vertexInmemoryArray);</div>
<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;            GraphLabVertexProgram glVertexProgram;</div>
<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;            </div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;            <span class="comment">/* Init */</span></div>
<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;            glVertexProgram.init(glcontext, wrapperVertex, <span class="keyword">typename</span> GraphLabVertexProgram::message_type());</div>
<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;            <span class="keyword">const</span> GraphLabVertexProgram&amp; const_vprog = glVertexProgram;</div>
<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;            </div>
<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;            <span class="comment">/* Gather */</span></div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;            edge_dir_type gather_direction = const_vprog.gather_edges(glcontext, wrapperVertex);</div>
<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;            gather_type sum;</div>
<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;            </div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;            <span class="keywordtype">int</span> gathered = 0;</div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;            <span class="keywordflow">switch</span> (gather_direction) {</div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;                <span class="keywordflow">case</span> ALL_EDGES:</div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;                <span class="keywordflow">case</span> IN_EDGES:</div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;                    <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0; i &lt; vertex.num_inedges(); i++) {</div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;                        <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">GraphLabEdgeWrapper&lt;GLVertexDataType, EdgeDataType&gt;</a> edgeWrapper(vertex.inedge(i), &amp;vertex, vertexInmemoryArray, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;                        <span class="keywordflow">if</span> (gathered &gt; 0) sum += const_vprog.gather(glcontext, wrapperVertex, edgeWrapper);</div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;                        <span class="keywordflow">else</span> sum = const_vprog.gather(glcontext, wrapperVertex, edgeWrapper);</div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;                        gathered++;</div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;                    }</div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;                    <span class="keywordflow">if</span> (gather_direction != ALL_EDGES)</div>
<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;                        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;                <span class="keywordflow">case</span> OUT_EDGES:</div>
<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;                    <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0; i &lt; vertex.num_outedges(); i++) {</div>
<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;                        <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">GraphLabEdgeWrapper&lt;GLVertexDataType, EdgeDataType&gt;</a> edgeWrapper(vertex.outedge(i), &amp;vertex, vertexInmemoryArray, <span class="keyword">false</span>);</div>
<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;                        <span class="keywordflow">if</span> (gathered &gt; 0) sum += const_vprog.gather(glcontext, wrapperVertex, edgeWrapper);</div>
<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;                        <span class="keywordflow">else</span> sum = const_vprog.gather(glcontext, wrapperVertex, edgeWrapper);</div>
<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;                        gathered++;</div>
<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;                    }</div>
<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;                    <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;                <span class="keywordflow">case</span> NO_EDGES:</div>
<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;                    <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;                <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;                    assert(<span class="keyword">false</span>); <span class="comment">// Huh?</span></div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;            }</div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;            </div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;            </div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;            <span class="comment">/* Apply */</span></div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;            glVertexProgram.apply(glcontext, wrapperVertex, sum);</div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;            </div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;            <span class="comment">/* Scatter */</span></div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;            edge_dir_type scatter_direction = const_vprog.scatter_edges(glcontext, wrapperVertex);</div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;            </div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;            <span class="keywordflow">switch</span>(scatter_direction) {</div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;                <span class="keywordflow">case</span> ALL_EDGES:</div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;                <span class="keywordflow">case</span> IN_EDGES:</div>
<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;                    <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0; i &lt; vertex.num_inedges(); i++) {</div>
<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;                        <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">GraphLabEdgeWrapper&lt;GLVertexDataType, EdgeDataType&gt;</a> edgeWrapper(vertex.inedge(i), &amp;vertex, vertexInmemoryArray, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;                        const_vprog.scatter(glcontext, wrapperVertex, edgeWrapper);</div>
<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;                    }    </div>
<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;                    <span class="keywordflow">if</span> (scatter_direction != ALL_EDGES)</div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;                        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;                <span class="keywordflow">case</span> OUT_EDGES:</div>
<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;                    <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0; i &lt; vertex.num_outedges(); i++) {</div>
<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;                        <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">GraphLabEdgeWrapper&lt;GLVertexDataType, EdgeDataType&gt;</a> edgeWrapper(vertex.outedge(i), &amp;vertex, vertexInmemoryArray, <span class="keyword">false</span>);</div>
<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;                        const_vprog.scatter(glcontext, wrapperVertex, edgeWrapper);</div>
<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;                    }    </div>
<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;                    <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;                <span class="keywordflow">case</span> NO_EDGES:</div>
<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;                    <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;                <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;                    assert(<span class="keyword">false</span>); <span class="comment">// Huh?</span></div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;            }</div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;            </div>
<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;            <span class="comment">/* Done! */</span></div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;        }</div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;        </div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;        </div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;    }; <span class="comment">// End GraphLabWrapper</span></div>
<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    </div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> GraphLabVertexProgram, <span class="keyword">typename</span> ReductionType,</div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    <span class="keyword">typename</span> EdgeMapType,</div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    <span class="keyword">typename</span> FinalizerType&gt;</div>
<div class="line"><a name="l00649"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html">  649</a></span>&#160;    <span class="keyword">struct </span><a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html">GraphLabEdgeAggregatorWrapper</a> : <span class="keyword">public</span> <a class="code" href="classgraphchi_1_1_graph_chi_program.html">GraphChiProgram</a>&lt;bool, typename GraphLabVertexProgram::edge_data_type&gt; {</div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;        <span class="keyword">typedef</span> <span class="keywordtype">bool</span> <a class="code" href="basic__dynamicengine__smoketest_8cpp.html#acf10237949ab87b83055ff6aa646c565">VertexDataType</a>;  <span class="comment">/* Temporary hack: as the vertices are stored in memory, no need to store on disk. */</span></div>
<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> GraphLabVertexProgram::vertex_data_type GLVertexDataType;</div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> GraphLabVertexProgram::edge_data_type EdgeDataType;</div>
<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> GraphLabVertexProgram::edge_type edge_type;</div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> GraphLabVertexProgram::gather_type gather_type;</div>
<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="als__vertex__program_8hpp.html#ab9cfd2cad1698282b6c7fd7f7e7fd459" title="The graph type is defined in terms of the vertex and edge data.">GraphLabVertexProgram::graph_type</a> <a class="code" href="als__vertex__program_8hpp.html#ab9cfd2cad1698282b6c7fd7f7e7fd459" title="The graph type is defined in terms of the vertex and edge data.">graph_type</a>;</div>
<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> GraphLabVertexProgram::message_type message_type;</div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;        </div>
<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;        <a class="code" href="classgraphchi_1_1mutex.html">mutex</a> m;</div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;        std::vector&lt;ReductionType&gt; localaggr;</div>
<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;        ReductionType aggr;</div>
<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;        std::vector&lt;GLVertexDataType&gt; * vertexInmemoryArray;</div>
<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;        EdgeMapType map_function;</div>
<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;        FinalizerType finalize_function;</div>
<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;        </div>
<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;        <a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html">GraphLabEdgeAggregatorWrapper</a>(EdgeMapType map_function,</div>
<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;                                      FinalizerType finalize_function, </div>
<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;                                      std::vector&lt;typename GraphLabVertexProgram::vertex_data_type&gt; * vertices) : map_function(map_function),</div>
<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;                                            finalize_function(finalize_function) {</div>
<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;            vertexInmemoryArray = vertices;</div>
<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;        }</div>
<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;</div>
<div class="line"><a name="l00675"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html#a5fb1dcefe5dd0a0aa5acef2bf4923309">  675</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html#a5fb1dcefe5dd0a0aa5acef2bf4923309">before_iteration</a>(<span class="keywordtype">int</span> iteration, <a class="code" href="structgraphchi_1_1graphchi__context.html">graphchi_context</a> &amp;gcontext) {</div>
<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;            aggr = ReductionType();</div>
<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;            localaggr.resize(gcontext.execthreads);</div>
<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;        }</div>
<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;        </div>
<div class="line"><a name="l00683"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html#a5ac70970586e4dc1c8857d480f676c42">  683</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html#a5ac70970586e4dc1c8857d480f676c42">after_iteration</a>(<span class="keywordtype">int</span> iteration, <a class="code" href="structgraphchi_1_1graphchi__context.html">graphchi_context</a> &amp;gcontext) {</div>
<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;            logstream(<a class="code" href="logger_8hpp.html#aeb4f36db01bd128c7afeac5889dac311">LOG_INFO</a>) &lt;&lt; <span class="stringliteral">&quot;Going to run edge-aggregator finalize.&quot;</span> &lt;&lt; std::endl;</div>
<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;            </div>
<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0; i &lt; (int)localaggr.size(); i++) {</div>
<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;                aggr += localaggr[i];</div>
<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;            }</div>
<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;            </div>
<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;            <a class="code" href="classgraphlab_1_1icontext.html">graphlab::icontext&lt;graph_type, gather_type, message_type&gt;</a> glcontext(&amp;gcontext);</div>
<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;            finalize_function(glcontext, aggr);</div>
<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;        }</div>
<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;        </div>
<div class="line"><a name="l00697"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html#a37629967de95c8f588d85ab86b6a9a34">  697</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html#a37629967de95c8f588d85ab86b6a9a34">before_exec_interval</a>(vid_t window_st, vid_t window_en, <a class="code" href="structgraphchi_1_1graphchi__context.html">graphchi_context</a> &amp;gcontext) {        </div>
<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;        }</div>
<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;        </div>
<div class="line"><a name="l00703"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html#a562d43f7bba1048d64898c1be24e730b">  703</a></span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html#a562d43f7bba1048d64898c1be24e730b">after_exec_interval</a>(vid_t window_st, vid_t window_en, <a class="code" href="structgraphchi_1_1graphchi__context.html">graphchi_context</a> &amp;gcontext) {        </div>
<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;        }</div>
<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;        </div>
<div class="line"><a name="l00709"></a><span class="lineno"><a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html#a02ed4a6564c752293c68fe18877feec7">  709</a></span>&#160;        <span class="keywordtype">void</span> <a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html#a02ed4a6564c752293c68fe18877feec7">update</a>(<a class="code" href="classgraphchi_1_1graphchi__vertex.html">graphchi_vertex&lt;bool, EdgeDataType&gt;</a> &amp;vertex, <a class="code" href="structgraphchi_1_1graphchi__context.html">graphchi_context</a> &amp;gcontext) {</div>
<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;            <a class="code" href="classgraphlab_1_1icontext.html">graphlab::icontext&lt;graph_type, gather_type, message_type&gt;</a> glcontext(&amp;gcontext);</div>
<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;            ReductionType a;</div>
<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0; i &lt; vertex.num_edges(); i++) {</div>
<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;                <span class="keyword">const</span> <a class="code" href="structgraphlab_1_1_graph_lab_edge_wrapper.html">GraphLabEdgeWrapper&lt;GLVertexDataType, EdgeDataType&gt;</a> edgeWrapper(vertex.<a class="code" href="classgraphchi_1_1graphchi__vertex.html#a79aebd315e4f333e8ba0e756c265883a">edge</a>(i), &amp;vertex, vertexInmemoryArray, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;                ReductionType mapped = map_function(glcontext, edgeWrapper);</div>
<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;                a += mapped;</div>
<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;            }    </div>
<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;            localaggr[omp_get_thread_num()] += a;</div>
<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;        }</div>
<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    }; <span class="comment">// End edge-aggregator wrapper</span></div>
<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;        </div>
<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;    </div>
<div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;         </div>
<div class="line"><a name="l00727"></a><span class="lineno"><a class="code" href="namespacegraphlab_1_1messages.html">  727</a></span>&#160;        <span class="keyword">namespace </span>messages {</div>
<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;            </div>
<div class="line"><a name="l00732"></a><span class="lineno"><a class="code" href="structgraphlab_1_1messages_1_1sum__priority.html">  732</a></span>&#160;            <span class="keyword">struct </span><a class="code" href="structgraphlab_1_1messages_1_1sum__priority.html">sum_priority</a> : <span class="keyword">public</span> <a class="code" href="structgraphlab_1_1_i_s___p_o_d___t_y_p_e.html">graphlab::IS_POD_TYPE</a> {</div>
<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;                <span class="keywordtype">double</span> value;</div>
<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;                <a class="code" href="structgraphlab_1_1messages_1_1sum__priority.html">sum_priority</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> value = 0) : value(value) { }</div>
<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;                <span class="keywordtype">double</span> priority()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value; }</div>
<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;                <a class="code" href="structgraphlab_1_1messages_1_1sum__priority.html">sum_priority</a>&amp; operator+=(<span class="keyword">const</span> <a class="code" href="structgraphlab_1_1messages_1_1sum__priority.html">sum_priority</a>&amp; other) {</div>
<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;                    value += other.value;</div>
<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;                    <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;                }</div>
<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;            }; <span class="comment">// end of sum_priority message</span></div>
<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;            </div>
<div class="line"><a name="l00745"></a><span class="lineno"><a class="code" href="structgraphlab_1_1messages_1_1max__priority.html">  745</a></span>&#160;            <span class="keyword">struct </span><a class="code" href="structgraphlab_1_1messages_1_1max__priority.html">max_priority</a> : <span class="keyword">public</span> <a class="code" href="structgraphlab_1_1_i_s___p_o_d___t_y_p_e.html">graphlab::IS_POD_TYPE</a> {</div>
<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;                <span class="keywordtype">double</span> value;</div>
<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;                <a class="code" href="structgraphlab_1_1messages_1_1max__priority.html">max_priority</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> value = 0) : value(value) { }</div>
<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;                <span class="keywordtype">double</span> priority()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value; }</div>
<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;                <a class="code" href="structgraphlab_1_1messages_1_1max__priority.html">max_priority</a>&amp; operator+=(<span class="keyword">const</span> <a class="code" href="structgraphlab_1_1messages_1_1max__priority.html">max_priority</a>&amp; other) {</div>
<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;                    value = std::max(value, other.value);</div>
<div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;                    <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;                }</div>
<div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;            }; <span class="comment">// end of max_priority message</span></div>
<div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;            </div>
<div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;            </div>
<div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;        }; <span class="comment">// end of messages namespace</span></div>
<div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;        </div>
<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;        </div>
<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;     </div>
<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;    </div>
<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;}; <span class="comment">// End namespace graphlab</span></div>
<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;</div>
<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> GraphLabVertexProgram&gt;</div>
<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    std::vector&lt;typename GraphLabVertexProgram::vertex_data_type&gt; *</div>
<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;            run_graphlab_vertexprogram(std::string base_filename, <span class="keywordtype">int</span> nshards, <span class="keywordtype">int</span> niters, <span class="keywordtype">bool</span> scheduler, <a class="code" href="classgraphchi_1_1metrics.html">metrics</a> &amp; _m,</div>
<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;                                    <span class="keywordtype">bool</span> modifies_inedges=<span class="keyword">true</span>, <span class="keywordtype">bool</span> modifies_outedges=<span class="keyword">true</span>) {</div>
<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;    <span class="keyword">typedef</span> <a class="code" href="structgraphlab_1_1_graph_lab_wrapper.html">graphlab::GraphLabWrapper&lt;GraphLabVertexProgram&gt;</a> GLWrapper;</div>
<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;    GLWrapper wrapperProgram;</div>
<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;    <a class="code" href="classgraphchi_1_1graphchi__engine.html">graphchi_engine&lt;bool, typename GLWrapper::EdgeDataType&gt;</a> engine(base_filename, nshards, scheduler, _m); </div>
<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;    engine.set_modifies_inedges(modifies_inedges);</div>
<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;    engine.set_modifies_outedges(modifies_outedges);</div>
<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;    engine.run(wrapperProgram, niters);</div>
<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;               <span class="keywordflow">return</span> wrapperProgram.vertexInmemoryArray;</div>
<div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;}</div>
<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;</div>
<div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> GraphLabVertexProgram, <span class="keyword">typename</span> ReductionType,</div>
<div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;    <span class="keyword">typename</span> EdgeMapType,</div>
<div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;    <span class="keyword">typename</span> FinalizerType&gt;</div>
<div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;ReductionType run_graphlab_edge_aggregator(std::string base_filename, <span class="keywordtype">int</span> nshards,</div>
<div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;                                  EdgeMapType map_function,</div>
<div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;                                  FinalizerType finalize_function, std::vector&lt;typename GraphLabVertexProgram::vertex_data_type&gt; * vertices, <a class="code" href="classgraphchi_1_1metrics.html">metrics</a> &amp; _m) {</div>
<div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;    <span class="keyword">typedef</span> <a class="code" href="structgraphlab_1_1_graph_lab_edge_aggregator_wrapper.html">graphlab::GraphLabEdgeAggregatorWrapper&lt;GraphLabVertexProgram, ReductionType, EdgeMapType, FinalizerType&gt;</a> GLEdgeAggrWrapper;</div>
<div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;    logstream(<a class="code" href="logger_8hpp.html#aeb4f36db01bd128c7afeac5889dac311">LOG_INFO</a>) &lt;&lt; <span class="stringliteral">&quot;Starting edge aggregator.&quot;</span> &lt;&lt; std::endl;</div>
<div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;    GLEdgeAggrWrapper glAggregator(map_function, finalize_function, vertices);</div>
<div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;    <a class="code" href="classgraphchi_1_1graphchi__engine.html">graphchi_engine&lt;bool, typename GLEdgeAggrWrapper::EdgeDataType&gt;</a> engine(base_filename, nshards, <span class="keyword">true</span>, _m); </div>
<div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    engine.set_modifies_inedges(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    engine.set_modifies_outedges(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;    engine.run(glAggregator, 1);</div>
<div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    <span class="keywordflow">return</span> glAggregator.aggr;</div>
<div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;}</div>
<div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;</div>
<div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;</div>
<div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;<span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jul 5 2012 00:11:17 for GraphChi by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.1
</small></address>
</body>
</html>
